/*
* 扫描器类
* */
export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr
    // 指针
    this.pos = 0
    // 尾巴
    this.tail = this.templateStr
  }

  // 功能弱，就是走过指定内容，没有返回值
  scan(tag) {
    if(this.tail.indexOf(tag) === 0) {
      // tag有多长，比如{{长度是2。就让指针后移多少位
      this.pos += tag.length
      this.tail = this.templateStr.substring(this.pos)
    }
  }

  // 让指针进行扫描，直到遇见指定内容结束，并且能够返回结束之前路过的文字
  scanUtil(stopTag) {
    // 记录pos值
    const pos_backup = this.pos
    // 当尾巴开头不是stopTag的时候，就说明还没扫描到stopTag
    while (!this.eos() && this.tail.indexOf(stopTag) !== 0) {
      this.pos++
      // 改变尾巴为从当前指针这个字符开始，到最后的全部字符
      this.tail = this.templateStr.substring(this.pos)
    }

    return this.templateStr.substring(pos_backup, this.pos)
  }

  // 指针是否已走到尽头
  eos() {
    return this.pos >= this.templateStr.length
  }
}